﻿<#
.SYNOPSIS
WSL迁移工具 - 简化版

.DESCRIPTION
直接执行WSL迁移操作，不包含跳过逻辑

.EXAMPLE
.\Migrate-WSL.ps1 "Ubuntu-22.04" "F:\wsl"
#>

param(
    [string]$DistroName = "Ubuntu-22.04",
    [string]$ImportBaseDir = "F:\WSL"
)

$ImportDir = $ImportBaseDir + "\" + $DistroName
$ExportPath = $ImportDir + ".tar"



# 确保目录存在
if (!(Test-Path (Split-Path $ExportPath -Parent))) {
    New-Item -ItemType Directory -Path (Split-Path $ExportPath -Parent) -Force
}
if (!(Test-Path $ImportBaseDir)) {
    New-Item -ItemType Directory -Path $ImportBaseDir -Force
}
if (!(Test-Path $ImportDir)) {
    New-Item -ItemType Directory -Path $ImportDir -Force
}

# 在迁移前获取用户信息
$UserName = (wsl -d $DistroName -- sh -c "whoami").Trim()
Write-Output "当前用户为: $UserName"

# 执行迁移操作
Write-Output "开始导出 $DistroName..."
wsl --export $DistroName $ExportPath

Write-Output "注销原有分发版..."
wsl --unregister $DistroName

Write-Output "导入到新位置..."
wsl --import $DistroName $ImportDir $ExportPath

# 迁移后恢复用户配置
Write-Output "恢复用户配置..."
wsl -d $DistroName -- sh -c "sudo echo '[user]' > /etc/wsl.conf && echo 'default=$UserName' >> /etc/wsl.conf"
wsl -d $DistroName -- sh -c "passwd $UserName"
# 确保用户被正确添加到sudo组
wsl -d $DistroName -- sh -c "if ! getent group sudo >/dev/null; then groupadd sudo; fi"
wsl -d $DistroName -- sh -c "usermod -aG sudo $UserName"
wsl -d $DistroName -- sh -c "echo '$UserName ALL=(ALL:ALL) ALL' > /etc/sudoers.d/$UserName"
wsl -d $DistroName -- sh -c "chmod 440 /etc/sudoers.d/$UserName"

# 修复apt相关目录权限
# Write-Output "修复apt权限..."
# wsl -d $DistroName -- sh -c "sudo chown -R ${USER}:${USER} /var/lib/apt/lists/"
# wsl -d $DistroName -- sh -c "sudo chown -R ${USER}:${USER} /var/cache/apt/"

Write-Output "迁移完成"
Write-Output "新位置: $ImportDir"

# 关闭所有WSL实例
Write-Output "正在关闭WSL实例..."
wsl.exe --shutdown